package com.huatai.vba.execute.action;

import java.text.SimpleDateFormat;
import java.util.*;

import org.springframework.stereotype.Service;

import com.huatai.vba.common.utils.MapUtils;
import com.huatai.vba.dal.model.VbaFileAction;
import com.huatai.vba.execute.action.vo.Sjshb;

/**
 * 回报库特殊处理
 * 
 * @author fanrui16
 *
 */
@Service("icbcSpecialHBActionExecutor")
public class IcbcSpecialHBActionExecutor extends AbstractIcbcActionExecutor {

	@Override
	public void execute(VbaFileAction action) {
		try {
			specialHB();
			String yyyy_MM_dd = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
			String yyyy = yyyy_MM_dd.substring(0, 4);
			String yyMM = yyyy_MM_dd.substring(2, 7).replace("-", "");
			String yyMMdd = yyyy_MM_dd.substring(2).replace("-", "");
			String dstFile = "H:/vsat3/dbf/" + yyyy + "/" + yyMM + "/" + yyMMdd + "/sjshb.dbf";
			dBFConvertDBService.convertDBFToDB(dstFile);
		} catch (Exception e) {
			logger.error("系统异常", e);
		}

	}

	public void specialHB() throws Exception {
		String tmpSql = "delete from sjshb";
		vbaExtendsService.executeSql(tmpSql);
		tmpSql = " select * from sjsmx1 ";
		Integer lngHBCJHM = 1;
		List<Map<String, Object>> resultList = vbaExtendsService.querySql(tmpSql);
		for (Map<String, Object> map : resultList) {
			// '明细库里不再有cjhm，暂采用流水号递增
			String tmp_HBCJHM = CStr(lngHBCJHM);

			String tmp_HBZQDM = CStr(map.get("mxZQDM".toUpperCase()));
			// '回报库的合同序号=6位mxjydy（交易单元） + 8位mxcjrq成交日期日期 + 8位 mxddbh
			String tmp_HBHTXH = CStr(map.get("mxjydy".toUpperCase())) + CStr(map.get("mxCJRQ".toUpperCase()))
					+ CStr(map.get("mxddbh".toUpperCase()));

			// '股东代码 mxzqdh 证券帐号
			String tmp_HBGDDM = CStr(map.get("mxzqzh".toUpperCase()));
			// '成交数量 MXCJSL
			Double tmp_HBCJSL = Math.abs(Double.valueOf(CStr(map.get("MXCJSL"))));
			// '成交价格
			Double tmp_HBCJJG = Math.abs(Double.valueOf(CStr(map.get("MXCJJG"))));
			// '对方席位 MXZXBH的前6位
			String tmp_HBDFXW = Left(CStr(map.get("MXZXBH".toUpperCase())), 6);
			// '对方股东号 MXZXBH的后10位
			String tmp_HBDFGD = Right(CStr(map.get("MXZXBH".toUpperCase())), 10);
			// '成交时间HBCJSJ取 MXYWLSH 流水号后8位
			String tmp_HBCJSJ = Right(CStr(map.get("MXYWLSH".toUpperCase())), 8);
			// '日期
			Date tmp_HBCJRQ = new SimpleDateFormat("yyyyMMdd").parse((String) map.get("MXCJRQ"));

			// '业务类别
			// '根据明细库证券类别和净收付金额 来匹配对应的回报库类别
			String tmp_HBYWLB = null;
			String tmp_MXYWLB = (String) MapUtils.getIgnoreCase(map, "MXYWLB");
			Double mxsfje = Double.valueOf(map.get("MXSFJE") + "");
			if ("JY00".equalsIgnoreCase(tmp_MXYWLB) || "JY01".equalsIgnoreCase(tmp_MXYWLB)) {
				if (mxsfje > 0) {
					tmp_HBYWLB = "0S";
				} else {
					tmp_HBYWLB = "0B";
				}
			} else if ("HGCS".equalsIgnoreCase(tmp_MXYWLB)) {
				if (Double.valueOf(mxsfje + "") > 0) {
					tmp_HBYWLB = "0S";
				} else {
					tmp_HBYWLB = "0B";
				}
			} else if ("HGDQ".equalsIgnoreCase(tmp_MXYWLB)) {
				if (Double.valueOf(mxsfje + "") > 0) {
					tmp_HBYWLB = "9S";
				} else {
					tmp_HBYWLB = "9B";
				}
			}
			String tmp_HBCDYY = "", tmp_HBMARK = "", tmp_HBBYBZ = "";
			Sjshb s = new Sjshb();
			s.setHbcjhm(tmp_HBCJHM);
			s.setHbzqdm(tmp_HBZQDM);
			s.setHbhtxh(tmp_HBHTXH);
			s.setHbgddm(tmp_HBGDDM);
			s.setHbcjsl(tmp_HBCJSL);
			s.setHbcjjg(tmp_HBCJJG);
			s.setHbdfxw(tmp_HBDFXW);
			s.setHbdfgd(tmp_HBDFGD);
			s.setHbcjsj(tmp_HBCJSJ);
			s.setHbcjrq(tmp_HBCJRQ);
			s.setHbywlb(tmp_HBYWLB);
			s.setHbcdyy(tmp_HBCDYY);
			s.setHbmark(tmp_HBMARK);
			s.setHbbybz(tmp_HBBYBZ);
			s.executeInsert(vbaExtendsService);
			if (isSjshg(tmp_HBZQDM)) {
				lngHBCJHM = lngHBCJHM + 1;
				tmp_HBCJHM = CStr(lngHBCJHM);
				if ("0S".equals(tmp_HBYWLB)) {
					tmp_HBYWLB = "0B";
				} else if ("0B".equals(tmp_HBYWLB)) {
					tmp_HBYWLB = "0S";
				}
				if ("0B".equals(tmp_HBYWLB) || "0S".equals(tmp_HBYWLB)) {
					s.setHbcjhm(tmp_HBCJHM);
					s.setHbcjsl(0d);
					s.setHbywlb(tmp_HBYWLB);
					s.executeInsert(vbaExtendsService);
				}
			}
			lngHBCJHM++;
		}

	}

}
